package studystat;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;


public class VakManager {
	
	private DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
	
	private List<Vak> vakken;
	
	private static VakManager instance = null;
	
	/**
	 * TODO: integers in vakken zetten!!
	 */
	private VakManager() {	
		vakken = new ArrayList<Vak>();
		// haalt info uit de datastore en zet deze info om in een lijst van vakken voor verder gebruik
			int i = 0;
			Query q2 = new Query("Vak");
			q2.addFilter("Naam", Query.FilterOperator.NOT_EQUAL, null);
			PreparedQuery pq2 = datastore.prepare(q2);
			for (Entity result2 : pq2.asIterable()) {
				  String naam = (String) result2.getProperty("Naam");
				  //int oefeningen = (Integer)result2.getProperty("Oefeningen");
				  //int paginas = (Integer) result2.getProperty("Paginas");
				  //int studiepunten = (Integer) result2.getProperty("Studiepunten");
				  //int oefeningen = Integer.parseInt(oefeningen1);
				  //int paginas = Integer.parseInt(paginas1);
				  //int studiepunten = Integer.parseInt(studiepunten1);
				  //vak.setOefeningenTotaal(oefeningen);
				  //vak.setPaginasTotaal(paginas);
				  //vak.setStudiepunten(studiepunten);
				  if(vakken.size()==0){
					  Vak vak = new Vak(naam);
					  vakken.add(vak);
				  }
				  boolean alErIn = false;
				  for(int j=0; j<vakken.size();j++){
				  if(naam.equals(vakken.get(j).getNaam())){
					 alErIn = true;
				  	}
				  }
				  if(!alErIn){
					  Vak vak = new Vak(naam);
					  vakken.add(vak);
				  }
				  
				  i++;
				}
			if(i==0){
				setVakken();
			}
		}

	public static VakManager getInstance() {
		if( instance == null ) {
			instance = new VakManager();
		}
		return instance;
	}
	
	
	
	public List<Vak> getVakken() {
		
		return vakken;
	}
	
	//moet gebeuren met de datastore en niet met de lijst!!!
	public Vak getVak(String naam) {
		int i=0;
		Vak hetVak = null;
		while(i< vakken.size())
		{
			if(vakken.get(i).getNaam().equals(naam))
			{
				hetVak = vakken.get(i); 
				i = vakken.size();
			}
			
			else
			{
				i++;
			}
			
		}
		
		return hetVak;
	}
	
	public void setVakken(){
		Vak vak0 = new Vak("Analyse III");
		vak0.setOefeningenTotaal(50);
		vak0.setPaginasTotaal(150);
		vak0.setLessen(null);
		vak0.setProfs(null);
		vak0.setStudiepunten(3);
		Vak vak1 = new Vak("Scheikunde");
		vak1.setOefeningenTotaal(50);
		vak1.setPaginasTotaal(100);
		vak1.setLessen(null);
		vak1.setProfs(null);
		vak1.setStudiepunten(3);
		Vak vak2 = new Vak("Informatie- overdracht en verwerking");
		vak2.setOefeningenTotaal(50);
		vak2.setPaginasTotaal(200);
		vak2.setLessen(null);
		vak2.setProfs(null);
		vak2.setStudiepunten(5);
		Vak vak3 = new Vak("Kansrekenen en statistiek");
		vak3.setOefeningenTotaal(75);
		vak3.setPaginasTotaal(250);
		vak3.setLessen(null);
		vak3.setProfs(null);
		vak3.setStudiepunten(3);
		Vak vak4 = new Vak("Numerieke wiskunde");
		vak4.setOefeningenTotaal(60);
		vak4.setPaginasTotaal(300);
		vak4.setLessen(null);
		vak4.setProfs(null);
		vak4.setStudiepunten(4);
		Vak vak5 = new Vak("Economie");
		vak5.setOefeningenTotaal(0);
		vak5.setPaginasTotaal(850);
		vak5.setLessen(null);
		vak5.setProfs(null);
		vak5.setStudiepunten(3);
		Vak vak6 = new Vak("Toegepaste Mechanica, deel II");
		vak6.setOefeningenTotaal(40);
		vak6.setPaginasTotaal(100);
		vak6.setLessen(null);
		vak6.setProfs(null);
		vak6.setStudiepunten(5);
		vakken.add(vak0);
		vakken.add(vak1);
		vakken.add(vak2);
		vakken.add(vak3);
		vakken.add(vak4);
		vakken.add(vak5);
		vakken.add(vak6);
		for(int i=0; i<vakken.size(); i++){
			Entity vak = new Entity("Vak");
				vak.setProperty("Naam",vakken.get(i).getName());
				vak.setProperty("Oefeningen",vakken.get(i).getOefeningenTotaal());
				vak.setProperty("Paginas", vakken.get(i).getPaginasTotaal());
				//vak.setProperty("Lessen",vakken.get(i).getLessen());
				//vak.setProperty("Profs",vakken.get(i).getProfs());
				vak.setProperty("Studiepunten",vakken.get(i).getStudiepunten());
				datastore.put(vak);
		}
	}
}
